/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Maestros.Controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
import pe.edu.pucp.Maestros.DAO.MaestoVueloDAO;
import pe.edu.pucp.Maestros.Vista.MaestoVueloGUI;
import pe.edu.pucp.Modelo.Aeropuerto;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Modelo.Vuelo;
import pe.edu.pucp.Seguridad.DAO.UsuarioDAO;
import pe.edu.pucp.Util.Utilitario;
import pe.edu.pucp.Util.ValHelper;

/**
 *
 * @author pedro
 */
public class MaestroVueloControlador {
    private MaestoVueloGUI view;
    private MaestoVueloDAO m;
    private ArrayList<Vuelo> lstVuelos;
    private ArrayList<Aeropuerto> lstAeropuertos;
    private ArrayList<Ciudad> lstCiudades;
    private ArrayList<Pais> lstPais;
    private ArrayList<Continente> lstContinentes;
    private Aeropuerto Ultimo;
    private Usuario usr;
    
    public MaestroVueloControlador(MaestoVueloDAO modelo, MaestoVueloGUI vview, Usuario user){ 
        this.view = vview;
        this.m = modelo;
        this.usr = user;
        view.mostrarPermisos(new  ArrayList<Permiso>(usr.getPerfil().getPermisos()));
        this.loadCombos();
        
        view.addAbrifFileListener(new AbrirFile());
        view.addSeleccionarArchivo(new BuscarArchivo());
        view.addCambiarContinente(new cambiarLstPais());
        view.addCambiarPais(new cambiarLstCiudad());
        view.addCambiarCiudad(new cambiarLstAeropuerto());
        view.addMostrarVuelosAcargar(new LeerXML());
        view.addCargarVuelos(new CargarVuelos());
        view.addBuscarVuelos(new BuscarVuelo());        
    }
    
    private void loadCombos() {
        llenarContinenteCombo();
        llenarPaisCombo(lstContinentes.get(view.getContinente()));
        llenarCiudadCombo(lstPais.get(view.getPais()));  
        llenarAeropuertoCombo(lstCiudades.get(view.getCiudad()));
    }
    
    private void llenarContinenteCombo(){
        lstContinentes = (new UsuarioDAO()).listarContinente();
        view.llenarComboContinente(lstContinentes);
    }
    
    private void llenarPaisCombo(Continente cont){
        lstPais= (new UsuarioDAO()).listarPais(cont.getIdcontinente());
        view.llenarComboPais(lstPais);
    }
    
    private void llenarCiudadCombo(Pais pais){
        lstCiudades = (new UsuarioDAO()).listarCiudad(pais.getIdpais());
        view.llenarComboCiudad(lstCiudades);
    }
    
    private void llenarAeropuertoCombo(Ciudad ciudad){
        lstAeropuertos = (new UsuarioDAO()).listarAeropuerto(ciudad.getIdciudad());
        view.llenarComboAeropuerto(lstAeropuertos);
        try{Ultimo= lstAeropuertos.get(0);}catch(Exception l){}                
    }
                
    class BuscarArchivo implements ActionListener {    
        @Override
        public void actionPerformed(ActionEvent e) {
            FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo de xml","xml");
            JFileChooser filechooser = new JFileChooser();
            filechooser.setFileFilter(filter);
            filechooser.setDialogTitle("Abrir archivo en");

            int result = filechooser.showOpenDialog(null);
            if (result == JFileChooser.APPROVE_OPTION){
            File file = filechooser.getSelectedFile();
            view.setNombreArchivo(file.getPath());
            }   
        }
    }
    
    class BuscarVuelo implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {

            lstVuelos = m.ListarVuelosDeUnAeropuerto(Ultimo.getIdaeropuerto(),view.getFechaInicio(),view.getFechaFin());
            if(!lstVuelos.isEmpty())
            {
                view.llenaGrillaResumen(lstVuelos);
            }
        }
    }

    class CargarVuelos implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            if (view.getNombreArchivo().isEmpty())
                ValHelper.mostrarAviso("Debe introducir la ruta del archivo a cargar");
            else
            {
            Utilitario u = new Utilitario();
            lstVuelos = u.CargarBDXml(view.getNombreArchivo(),Ultimo.getIdaeropuerto(),usr);
            view.llenaGrillaResumen(lstVuelos);
            }
        }
    }


    class cambiarLstPais implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED){
                llenarPaisCombo(lstContinentes.get(view.getContinente()));
            }
        }        
    }  
    
    class cambiarLstCiudad implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                 llenarCiudadCombo(lstPais.get(view.getPais()));
            }
        }        
    } 
            
    class cambiarLstAeropuerto implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                llenarAeropuertoCombo(lstCiudades.get(view.getCiudad()));
            }
        }        
    }

    class LeerXML implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {            
            Utilitario u = new Utilitario();            
            String cadena = view.getNombreArchivo();          
            if (!cadena.isEmpty()) {                
                try{
                    lstVuelos = u.MostrarXml(view.getNombreArchivo());
                    view.llenaGrillaConsulta(lstVuelos);
                } catch(Exception x){
                    JOptionPane.showMessageDialog(view.getPadre(), "El archivo que desea leer posee errores", "error", JOptionPane.ERROR_MESSAGE);
                }
            } else {
                view.llenaGrillaConsulta(new ArrayList());
            }
        }      
    }

     class AbrirFile implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            JFileChooser filechooser = new JFileChooser();
            filechooser.setDialogTitle("Seleccione una carpeta");
            filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            int result = filechooser.showOpenDialog(null); 
            if (result == JFileChooser.APPROVE_OPTION){
               String path = filechooser.getSelectedFile().getPath();
                    view.setNombrePathArchivo(path);                
            }         
        }     
    }

}


